package testJdk.io.buffered;


import java.io.*;

public class TestFileCopy {

    public static void main(String[] args) throws IOException {
        // 1.创建输入流和输出流
        /*File file1 = new File("D:\\Colors.exe"); // 这个文件必须存在
        File file2 = new File("D:\\Colors.exe");// 这个文件可以不存在
        FileInputStream fis = new FileInputStream(file1);
        FileOutputStream fos = new FileOutputStream(file2);
        BufferedInputStream bis = new BufferedInputStream(fis);
        BufferedOutputStream bos = new BufferedOutputStream(fos);*/

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\Colors.exe"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\Colors.exe"));
        // 2.使用流完成文件的复制
        int n; // 中转站
        n = bis.read(); // 先用输入流从数据源读取一个字节，返回的是读取的数据，或者-1；
        while (-1 != n) { // 如果读取的内容不为空
            bos.write(n); // 用输出流将数据写给目的地
            n = bis.read(); // 再用输入流读取一个字节，并赋值给n
        }
        //当n内容为空时，出循环
        // 3.关闭输入流和输出流
        bis.close();
        bos.close();
    }
}

/*read（）方法一进去就先填充了缓存，之后再从缓存里面取值返回
    public synchronized int read() throws IOException {
        if (pos >= count) {
            fill(); //这里先填充缓存
            if (pos >= count)
                return -1;
        }
        return getBufIfOpen()[pos++] & 0xff;
    }*/